package com.xinchao.dao;

import com.github.pagehelper.Page;
import com.xinchao.model.Area;
import com.xinchao.model.dto.DeviceInfoForExtDTO;
import com.xinchao.model.dto.DeviceInfoListDTO;
import com.xinchao.model.dto.UpdateDeviceDetailDTO;
import com.xinchao.model.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface DeviceMapper {

    /**
     * 获取终端信息列表
     * hanqr 2018-08-07
     *
     * @param cityName      当前登录城市名称
     * @param machineNumber 机器码
     * @param propertyName  物业名称
     * @param deviceMac     设备mac
     * @param deviceIp      设备IP
     * @param administrator 管理人员
     * @param district      区/县
     * @param onlineStatus  在线状态（0.在线; 1.离线）
     * @param deviceStatus  设备状态:（0:可售  1:预拆除  2:维护）
     * @return
     */
    Page<DeviceInfoListDTO> listByPage(@Param("cityName") String cityName, @Param("machineNumber") String machineNumber, @Param("propertyName") String propertyName,
                                       @Param("deviceMac") String deviceMac, @Param("deviceIp") String deviceIp, @Param("administrator") String administrator,
                                       @Param("district") String district, @Param("onlineStatus") Integer onlineStatus, @Param("deviceStatus") Integer deviceStatus, @Param("softwareVersion") String softwareVersion, @Param("firmwareVersion") String firmwareVersion);

    /**
     * 查询所有终端中所有的固件版本号
     *
     * @return List<String>
     */
    List<String> listAllFirmwareVersion();

    /**
     * 条件查询终端统计符合条件的终端数量
     *
     * @param cityCode      当前登录城市编码
     * @param onlineStatus  在线状态（在线OR离线）
     * @param softVer       软件版本
     * @param firmVer       固件版本
     * @param deviceModel   机型
     * @param machineNumber 机器码
     * @param propertyName  物业名称
     * @param deviceMac     设备mac
     * @param deviceIp      设备IP
     * @param administrator 管理人员
     * @param district      区/县
     * @param deviceStatus  设备状态:（0:可售  1:预拆除  2:维护）
     * @return Long
     */
    Long getDeviceCountByCondition(@Param("cityCode") String cityCode, @Param("onlineStatus") Integer onlineStatus, @Param("softVer") String softVer, @Param("firmVer") String firmVer,
                                   @Param("deviceModel") String deviceModel, @Param("machineNumber") String machineNumber, @Param("propertyName") String propertyName,
                                   @Param("deviceMac") String deviceMac, @Param("deviceIp") String deviceIp, @Param("administrator") String administrator,
                                   @Param("district") String district, @Param("deviceStatus") Integer deviceStatus);

    /**
     * 根据城市编码查询所有行政区域
     * hanqr 2018-08-07
     *
     * @param cityCode 城市编码
     * @return
     */
    List<Area> getDistrictByCityCode(@Param("cityCode") String cityCode);

    /**
     * 获取终端详情
     *
     * @param deviceId 终端ID
     * @return DeviceDetailVO
     * @author linqiang
     */
    DeviceDetailVO getDeviceDetail(Long deviceId);

    /**
     * 修改终端信息
     *
     * @param deviceDetail 终端信息
     * @return 影响行数
     * @author linqiang
     */
    int updateDevice(UpdateDeviceDetailDTO deviceDetail);

    /**
     * 统计终端数量
     *
     * @param currentCity 当前城市
     * @return DeviceCountVO
     */
    DeviceCountVO countByCity(@Param("currentCity") String currentCity);

    /**
     * 查询终端日志
     * hanqr 2018-08-09
     *
     * @param deviceCode 机器编码
     * @param startTime  开始时间戳
     * @param endTime    结束时间戳
     * @param logType    日志类型 crash:崩溃日志, run:运行日志, play:播放日志
     * @return
     */
    Page<DeviceLogListVO> listDeviceLogs(@Param("deviceCode") String deviceCode, @Param("startTime") Long startTime, @Param("endTime") Long endTime, @Param("logType") String logType);

    /**
     * 终端管理授权
     * hanqr 2018-08-09
     *
     * @param deviceCode 终端编码
     * @param users      用户Id(多个id之间用逗号隔开)
     */
    void deviceAuthority(@Param("deviceCode") String deviceCode, @Param("users") String users);

    /**
     * 终端升级分页筛选查询终端
     *
     * @param cityName     当前登录城市名称
     * @param softVer      软件版本
     * @param firmVer      固件版本
     * @param onlineStatus 在线状态(0:在线 1:离线)
     * @param upgradeType  更新类型(0:APK 1:固件)
     * @param deviceModel  机型
     * @param district     行政区
     * @return Page<UpgradeDeviceListVO>
     */
    Page<UpgradeDeviceListVO> listUpgradeDeviceByPage(@Param("cityName") String cityName, @Param("softVer") String softVer, @Param("firmVer") String firmVer, @Param("onlineStatus") Integer onlineStatus,
                                                      @Param("upgradeType") Integer upgradeType, @Param("deviceModel") String deviceModel, @Param("district") String district);

    /**
     * 查询所有终端中所有的mips版本号
     * hanqr 2018-08-14
     *
     * @return
     */
    List<String> listAllSoftwareVersion();

    /**
     * 根据deviceCode查询终端详情
     * hanqr 2018-08-16
     *
     * @param deviceCode 终端唯一编码
     * @return
     */
    DeviceDetailVO getDeviceDetailByDeviceCode(@Param("deviceCode") String deviceCode);

    /**
     * 导出终端管理列表
     * hanqr 2018-08-29
     *
     * @param cityName      当前登录城市名称
     * @param machineNumber 机器码
     * @param propertyName  物业名称
     * @param deviceMac     设备mac
     * @param deviceIp      设备IP
     * @param administrator 管理人员
     * @param district      区/县
     * @param onlineStatus  在线状态（0.在线; 1.离线）
     * @param deviceStatus  设备状态:（0:可售  1:预拆除  2:维护）
     * @return
     */
    Page<DeviceInfoExportListVO> exportListByPage(@Param("cityName") String cityName, @Param("machineNumber") String machineNumber, @Param("propertyName") String propertyName,
                                                  @Param("deviceMac") String deviceMac, @Param("deviceIp") String deviceIp, @Param("administrator") String administrator,
                                                  @Param("district") String district, @Param("onlineStatus") Integer onlineStatus, @Param("deviceStatus") Integer deviceStatus, @Param("softwareVersion") String softwareVersion, @Param("firmwareVersion") String firmwareVersion);

    /**
     * 对外提供查询设备（点位）信息
     *
     * @param queryDeviceNumList
     * @return
     */
    Page<DeviceInfoForExtDTO> queryDeviceInfoForExtByPage(@Param("deviceNumList") List<String> queryDeviceNumList);
}